package com.tul.vapp.servicecenter.service;

import com.tul.vapp.servicecenter.entity.Namespace;

import java.util.List;

/**
 * 命名空间服务
 *
 * @author wwxiang
 * @since 2018/1/3.
 */
public interface INamespaceService {
    /**
     * 新增命名空间
     *
     * @param namespace 命名空间
     * @return 结果
     */
    boolean addNamespace(Namespace namespace);

    /**
     * 修改命名空间
     *
     * @param namespace 命名空间
     * @return 结果
     */
    boolean updateNamespace(Namespace namespace);

    /**
     * 获取命名空间
     *
     * @param appId 应用id
     * @return 命名空间
     */
    List<Namespace> getNamespaces(String appId);

    /**
     * 获取发布的命名空间
     *
     * @param appId appId
     * @return 发布的命名空间
     */
    List<Namespace> getReleaseNamespaces(String appId);

    /**
     * 获取全局命名空间
     *
     * @return 命名空间
     */
    List<Namespace> getNamespaces();

    /**
     * 获取命名空间
     *
     * @param appId     appId
     * @param namespace namespace
     * @return Namespace
     */
    Namespace getNamespace(String appId, String namespace);

    /**
     * 级联删除
     *
     * @param appId     应用id
     * @param namespace namespace
     */
    void deleteCascade(String appId, String namespace);

    /**
     * 发布APP
     *
     * @param appId     应用id
     * @param namespace 命名空间
     */
    void publish(String appId, String namespace);

    /**
     * 将DB中所有的ns数据回退
     *
     * @param appId     应用id
     * @param namespace 命名空间
     */
    void rollback(String appId, String namespace);

    /**
     * 一致性检查，确保发布表和操作表一致
     *
     * @param appId 应用id
     */
    void sanityCheck(String appId);
}
